home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Toolkit / DOSIT54.ARC / _DIR SORT (.txt) next >
Commodore BASIC  |  2019-04-13  |  9KB  |  237 lines

  1. 1 POKE53265,27
  2. 10 POKE55,0:POKE56,60:POKE643,0:POKE644,60:CLR:REM LOWER MEMORY TOP FOR ALT SCREEN
  3. 15 POKE53281,6:POKE53280,14:PRINT""CHR$(142)CHR$(8);:REM SET COLORS,DISABLE L/C
  4. 20 REM*******LOAD MACHINE LANGUAGE PROGRAM INTO MEMORY*************************
  5. 30 GOSUB1290:GOTO270
  6. 40 REM*******SUBROUTINE: READ DIRECTORY FROM DISK******************************
  7. 50 CLOSE5:OPEN5,8,5,"#":S%(1)=1:DE=0:I=1:REM SECTOR 1, DIRECTORY ENTRY 0
  8. 55 PRINT"[147]";:ME$="READING DIRECTORY":GOSUB 1220
  9. 60 PRINT#15,"U1:";5;0;18;S%(I):I=I+1:GOSUB1262:IFERTHEN850
  10. 70 GET#5,T$:GET#5,S$:S%(I)=ASC(S$+CHR$(0))
  11. 80 FORQ=1TO8:DE=DE+1:DR$(DE)=""
  12. 90 SYS896:DR$(DE)=A$
  13. 100 IFQ<>8THENGET#5,NG$,NG$
  14. 110 NEXT Q:IFS%(I)<21THEN60
  15. 120 CLOSE5
  16. 130 RETURN
  17. 140 REM*******SUBROUTINE: DISPLAY DIRECTORY ***********************************
  18. 150 IFALTHENGOSUB1190
  19. 155 PRINT"[147]";:TA=0
  20. 160 FORQ=1TOG
  21. 170 IFQ=24ORQ=70THENTA=20:PRINT"";
  22. 180 IFQ=47THENGOSUB1190:PRINT"";:TA=0
  23. 190 PRINTTAB(TA)"[155]"RIGHT$(STR$(Q),2)" "MID$(DR$(SC%(Q)),4,16):REM PRINT NAMES
  24. 200 NEXTQ
  25. 210 RETURN
  26. 220 CLOSE5:RETURN
  27. 230 REM
  28. 240 REM
  29. 250 REM
  30. 260 REM*************INITIALIZE*************************************************
  31. 270 DIM DR$(145),S%(20),NM$(145),SO%(145),SC%(145)
  32. 280 AL=0:GOSUB1190:PRINT"[147]";:GOSUB1190:REM CLEAR ALT. SCREEN
  33. 290 SP$="                    "
  34. 300 VE$=""
  35. 305 GOSUB1490
  36. 320 GETJ$:IFJ$=""THEN320
  37. 325 IFJ$="I"THENGOSUB1700:GOTO305:REM PRINT INSTRUCTIONS IF REQUESTED
  38. 330 CLOSE15:OPEN15,8,15,"I":REM COMMAND CHAN.
  39. 340 REM********READ IN DIRECTORY***********************************************
  40. 350 GOSUB50:REM READ THE DIRECTORY FROM DISK INTO DR$() ARRAY
  41. 360 REM****** BUILD SCREEN POSITION ARRAY *************************************
  42. 370 G=0:D=0:REM SORT ENTRIES INTO GOOD PILE AND DELETED PILE
  43. 380 FORJ=1TODE
  44. 390 A=ASC(DR$(J)+CHR$(0)):IFA<128THEND=D+1:SO%(D)=J:GOTO410
  45. 400 G=G+1:SC%(G)=J
  46. 410 NEXTJ
  47. 415 IFG>46THENPG=1:IFG>92THENPRINT"[147]  OVER 92 ENTRIES - CAN'T DO":GOTO850
  48. 420 D=0:FORJ=G+1TODE:D=D+1:SC%(J)=SO%(D):NEXTJ:REM DELETED ENTRIES AT END OF ARRAY
  49. 430 REM********DISPLAY UNSORTED DIRECTORY**************************************
  50. 440 GOSUB 150:IFPGTHENGOSUB1215:REM PRINT THE DIRECTORY
  51. 450 REM********PRESENT MENU CHOICES********************************************
  52. 460 ME$="(1) ALPHABETIZE OR (2) CUSTOM SORT?"
  53. 470 GOSUB1220:GOSUB1160:ONVAL(Q$)GOTO510,910:IFPGTHENIFQ$="[133]"THENGOSUB1190:GOSUB1215
  54. 475 GOTO460
  55. 480 REM
  56. 490 REM
  57. 500 REM
  58. 510 REM*******ALPHABETIZE******************************************************
  59. 515 ME$="[146]                               [145]":GOSUB 1220
  60. 520 ME$="..PREPARING FOR SORT -- PLEASE WAIT..":GOSUB1220
  61. 530 FOR X=1TOG:REM LOOP TO CONVERT FILE NAMES
  62. 540 NM$(X)=MID$(DR$(SC%(X)),4,16)
  63. 550 FORP=2TO17:REM LOOP TO HACK SHIFTED SPACES FROM END
  64. 560 IFMID$(NM$(X),P,1)=CHR$(160)THENNM$(X)=MID$(NM$(X),1,P-1):GOTO580
  65. 570 NEXT P
  66. 580 NEXT X
  67. 590 ME$=".........NOW SORTING.........":GOSUB1220
  68. 600 REM SHELL SORT
  69. 620 B=G
  70. 630 B=INT(B/2):PRINTVE$;""MID$(STR$(B),2)"[146] ";:IFB=0THEN690
  71. 640 X=1:K=G-B
  72. 645 C=X
  73. 650 D=C+B:IFNM$(C)<=NM$(D)THEN670
  74. 660 H%=SC%(C):SC%(C)=SC%(D):SC%(D)=H%
  75. 665 HO$=NM$(C):NM$(C)=NM$(D):NM$(D)=HO$:C=C-B:IFC>0THEN650
  76. 670 X=X+1:IFX>KTHEN630
  77. 672 GOTO645
  78. 673 REM
  79. 674 REM
  80. 680 REM*******DISPLAY SORTED DIRECTORY*****************************************
  81. 690 GOSUB150
  82. 692 ME$="OKAY?  Y/N":GOSUB1220:IFPGTHENGOSUB1215
  83. 695 GOSUB1160:IFPGTHENIFQ$="[133]"THENGOSUB1190:GOTO692
  84. 700 IFQ$<>"Y"THEN910
  85. 710 REM*******WRITE NEW DIRECTORY TO DISK**************************************
  86. 720 OPEN5,8,5,"#":REM FILE CHAN.
  87. 730 W=I-1:DW=0:REM W=NUMBER OF BLOCKS TO WRITE
  88. 740 FOR I=1TOW:PRINT#15,"B-P:";5;0:REM LOOP TO WRITE. FORCE BUF POINT TO BEGIN
  89. 750 TT=18:IFS%(I+1)=255THENTT=0:REM TRACK # TO WRITE. 0 IF LAST BLOCK
  90. 760 PRINT#5,CHR$(TT);CHR$(S%(I+1));:REM PUT THE TRACK AND NEXT SECTOR
  91. 770 FOR Q=1TO8:DW=DW+1:REM LOOP TO PUT THE DIR ENTRIES
  92. 780 PRINT#5,DR$(SC%(DW));:REM PUT THE ENTRY
  93. 790 IFQ<>8THENPRINT#5,"SG";:REM PUT IN 2 DUMMY BYTES
  94. 800 NEXT Q
  95. 810 PRINT#15,"U2:";5;0;18;S%(I):GOSUB1262:IF ERTHEN850
  96. 820 ME$="WRITING SECTOR: "+STR$(S%(I)):GOSUB1220
  97. 830 NEXT I
  98. 840 REM************EXIT********************************************************
  99. 850 ME$="D O N E":GOSUB1220:IFPGTHENGOSUB1200
  100. 860 POKE56,160:POKE644,160:PRINTVE$;:CLOSE5:CLOSE15:PRINTCHR$(9);:GOTO9000
  101. 870 REM
  102. 880 REM
  103. 890 REM
  104. 900 REM****** INPUT CUSTOM SORT ***********************************************
  105. 910 ME$="RENUMBER ENTRIES, THEN PRESS <F7>"
  106. 920 GOSUB1220:PRINT"";
  107. 930 SYS938:IFPEEK(780)=136THENME$="...RE-SORTING...":GOSUB1220:GOTO970
  108. 940 IFPGTHENIFPEEK(780)=133THENGOSUB1190:GOTO920
  109. 950 GOTO930
  110. 960 REM*******RE-SORT ACCORDING TO NEW ORDER***********************************
  111. 970 FORJ=1TOG:SO%(J)=0:NEXTJ:REM CLEAR SORT ARRAY
  112. 980 IFALTHENGOSUB1190:REM START ON 1ST PAGE
  113. 990 CLOSE3:OPEN3,3:TA=0
  114. 1000 FORJ=1TOG
  115. 1010 IFJ=24ORJ=70THENTA=20
  116. 1020 IFJ=47THENGOSUB1190:TA=0
  117. 1030 GOSUB1240:INPUT#3,TEMP$:NN=VAL(LEFT$(TEMP$,2))
  118. 1040 IFNN<1ORNN>GTHENME$="INVALID NUMBER - PLEASE CHANGE":GOSUB1220:GOSUB1260:GOTO930
  119. 1050 IFSO%(NN)<>0THENME$="DUPLICATE NUMBER - PLEASE CHANGE":GOSUB1220:GOSUB1260:GOTO930
  120. 1060 SO%(NN)=SC%(J)
  121. 1070 NEXT:CLOSE3
  122. 1080 FORJ=1TOG:SC%(J)=SO%(J):NEXT:REM TRANSFER SORTED KEY #'S TO SC%() ARRAY
  123. 1090 GOTO690:REM DISPLAY SORTED DIRECTORY & CONFIRM
  124. 1100 REM
  125. 1110 REM
  126. 1120 REM***********************************************************************
  127. 1130 REM              SUBROUTINES
  128. 1140 REM***********************************************************************
  129. 1150 REM*******SUBROUTINE: GET*************************************************
  130. 1160 GETQ$:IFQ$=""THEN1160
  131. 1170 RETURN
  132. 1180 REM******SUBROUTINE: TOGGLE ALTERNATE SCREENS*****************************
  133. 1190 AL=NOTAL:IFALTHENPOKE53272,245:POKE648,60:RETURN
  134. 1200 POKE 53272,21:POKE648,4:RETURN
  135. 1210 REM*******SUBROUTINE: PRINT MESSAGE AT SCREEN BOTTOM**********************
  136. 1215 ME$="HIT <F1> TO SEE PAGE "+RIGHT$(STR$(AL+2),1)+"[145]"
  137. 1220 SP=39-LEN(ME$):HS=INT(SP/2):PRINTVE$LEFT$(SP$,SP-HS)""ME$"[146]"LEFT$(SP$,HS);:RETURN
  138. 1230 REM*******SUBROUTINE: MOVE CURSOR TO ENTRY J******************************
  139. 1240 PRINTLEFT$(VE$,J-INT((J-1)/23)*23)TAB(TA);:RETURN
  140. 1250 REM*******SUBROUTINE: HIGHLIGHT NUMBER AT ENTRY J*************************
  141. 1260 GOSUB1240:PRINT""RIGHT$(STR$(NN),2)"[146] [157]";:RETURN
  142. 1261 REM*******SUBROUTINE: READ ERROR CHANNEL
  143. 1262 INPUT#15,ER,ER$,TR,SE:IFER>19THENPRINT"[147]"ER;ER$;" TRACK"TR" SECTOR"SE
  144. 1263 RETURN
  145. 1270 REM *******SUBROUTINE: LOAD "STRING THING" M.L. PROGRAM INTO MEMORY*******
  146. 1280 REM STRING MUST BE FIRST VARIABLE
  147. 1290 A$="ABCDEFGHIJKLM"
  148. 1300 A$=A$+"NOPQRSTUVWXYZ1234"
  149. 1310 REM ABOVE SETS STRING FOR 30 CHARS
  150. 1320 PRINT"[147]ONE MOMENT PLEASE"
  151. 1330 DATA 160, 2, 177, 45, 153, 137, 0, 200, 192, 6, 208
  152. 1335 DATA 246, 162, 5, 32, 198, 255, 32, 228, 255, 234
  153. 1340 DATA 234, 234, 234, 164, 142, 145, 140, 200, 132, 142
  154. 1345 DATA 196, 139, 240, 4, 165, 144, 240, 234, 76, 204
  155. 1350 DATA 255, 160, 1, 140, 146, 2, 208, 3, 32, 22
  156. 1355 DATA 231, 32, 44, 168, 165, 198, 133, 204, 240, 247
  157. 1360 DATA 120, 165, 207, 240, 12, 165, 206, 174, 135, 2
  158. 1365 DATA 160, 0, 132, 207, 32, 19, 234, 32, 180, 229
  159. 1370 DATA 201, 136, 240, 4, 201, 133, 208, 1, 96, 201
  160. 1375 DATA 13, 240, 4, 201, 17, 208, 8, 166, 214, 224
  161. 1380 DATA 24, 144, 201, 176, 202, 166, 211, 224, 39, 208
  162. 1390 DATA 193, 201, 157, 240, 189, 201, 145, 240, 185, 201
  163. 1400 DATA 29, 240, 181, 208, 182, 0, 0
  164. 1430 FORJ=896TO1022:READX:POKEJ,X:NEXTJ:J=0
  165. 1440 RETURN
  166. 1490 PRINT"[147][176]";:FORX=1TO38:PRINT"[177]";:NEXT:PRINT"[174]";
  167. 1491 FORX=1TO23:PRINT"[179]"SPC(37)"[171][157][148] ";:NEXT
  168. 1492 PRINT"[173]";:FORX=1TO37:PRINT"[178]";:NEXT:PRINT"[189][157][148][178]";
  169. 1500 PRINT"";
  170. 1510 PRINTSPC(12)"/****** OCTOR"
  171. 1520 PRINTSPC(12)"/*******"
  172. 1530 PRINTSPC(12)"/**////**"
  173. 1540 PRINTSPC(12)"/**    /**"
  174. 1550 PRINTSPC(12)"/**    /**"
  175. 1560 PRINTSPC(12)"/**    /**"
  176. 1570 PRINTSPC(12)"/**    /**"
  177. 1580 PRINTSPC(12)"/**   /**"
  178. 1590 PRINTSPC(12)"/*******"
  179. 1600 PRINTSPC(12)"/****** IRECTORY"
  180. 1610 PRINTSPC(12)"//////"
  181. 1620 PRINT:PRINT:PRINT
  182. 1630 PRINTSPC(17)"MODIFIED BY":PRINT
  183. 1640 PRINTSPC(12)"JAMES P. AMYX"
  184. 1642 FORX=1TO1000:NEXT
  185. 1643 PRINT:PRINT"[164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]"
  186. 1645 PRINT"INSERT DISK TO BE SORTED, THEN HIT SPACE[146]";
  187. 1647 PRINTSPC(6)"[164][164][164][164][164][164][164][164][164][164][164][164]OR[164][164][164][164][164][164][164][164][164][164][164][164]"
  188. 1649 PRINTTAB(6)"PRESS "+CHR$(34)+"I"+CHR$(34)+" FOR INSTRUCTIONS[146]"
  189. 1650 RETURN
  190. 1700 PRINT"[147]"SPC(13)"INSTRUCTIONS":PRINTSPC(13)"[163][163][163][163][163][163][163][163][163][163][163][163]
  191. 1710 [153]" DOCTORWAIT DIRECTORYWAIT WILL RE-SORT YOUR"
  192. 1720 [153]" DIRECTORY ENTRIES IN ANY ORDER YOU"
  193. 1730 [153]" CHOOSE.  JUST INSERT THE DISK TO BE"
  194. 1740 [153]" SORTED INTO THE DISK DRIVE, THEN HIT
  195. 1750 PRINT" THE SPACE BAR.":PRINT:PRINT" THE DIRECTORY ENTRIES WILL BE"
  196. 1760 PRINT" DISPLAYED, NUMBERED IN THEIR CURRENT
  197. 1770 [153]" ORDER.  (NOTE:  THE NUMBERS DO NOTWAIT
  198. 1780 PRINT" REPRESENT BLOCKS.  THEY SIMPLY
  199. 1790 [153]" REPRESENT THE ORDER IN WHICH EACH"
  200. 1800 [153]" ENTRY APPEARS IN THE DIRECTORY.)"
  201. 1810 [153]:[153]" IF YOU WISH TO ALPHABETIZE THE
  202. 1820 PRINT" ENTRIES, PRESS THE "CHR$(34)"1"CHR$(34)" KEY, AND
  203. 1830 [153]" THE DIRECTORY WILL BE ALPHABETIZED
  204. 1835 PRINT" AUTOMATICALLY."
  205. 1840 PRINT:PRINT" IF YOU WISH TO SORT THEM IN SOME
  206. 1850 [153]" OTHER ORDER, PRESS THE "[199](34)"2"[199](34)" KEY.
  207. 1855 PRINT:PRINT"    (PRESS ANY KEY TO CONTINUE)[146]";
  208. 1857 GET AN$:IF AN$=""THEN1857
  209. 1860 PRINT"[147]":PRINT" YOU WILL THEN BE GIVEN CONTROL OF THE
  210. 1870 [153]" CURSOR.  USING THE NORMAL";
  211. 1880 [153]" KEYBOARD":[153]" CONTROLS, RE-NUMBER THE ENTRIES
  212. 1890 PRINT" IN ANY ORDER YOU WISH.  JUST TYPE
  213. 1900 [153]" OVER THE OLD NUMBERS WITH YOUR NEW"
  214. 1910 [153]" ONES.  WHEN DONE, PRESS THE F7 KEY.
  215. 1920 PRINT:PRINT" THE PROGRAM WILL CHECK YOUR NUMBERING
  216. 1930 [153]" FOR ERRORS, THEN DISPLAY THE DIRECTORY
  217. 1940 PRINT" ENTRIES IN THEIR NEW ORDER, AND ASK
  218. 1950 [153]" "[199](34)"OKAY?"[199](34)".  IF YOU ANSWER YES, THE
  219. 1960 PRINT" NEW DIRECTORY WILL BE WRITTEN TO THE
  220. 1970 [153]" DISK.  IF YOU ANSWER NO, YOU'LL BE
  221. 1980 PRINT" GIVEN THE CHANCE TO RE-DO IT UNTIL
  222. 1990 [153]" YOU'RE SATISFIED.  TO ABORT, PRESS
  223. 2000 PRINT" THE RUN-STOP KEY AT ANY TIME.
  224. 2010 [153]:[153]" IF YOUR DIRECTORY HAS MORE THAN 46
  225. 2020 PRINT" ENTRIES (MAX=92), IT WILL BE DISPLAYED
  226. 2030 [153]" ON TWO SEPARATE PAGES.  USE THE F1
  227. 2040 PRINT" KEY AT ANY TIME TO FLIP BACK AND
  228. 2050 [153]" FORTH BETWEEN THE TWO PAGES.
  229. 2060 PRINT:PRINT"      (PRESS ANY KEY TO RETURN)[146]";
  230. 2070 GETAN$:IFAN$=""THEN2070
  231. 2080 RETURN
  232. 9000 PRINT"INSERT DOSIT DISK AND PRESS A KEY"
  233. 9001 GETA$:IFA$=""THEN9001
  234. 9002 PRINT"LOAD"+CHR$(34)+"DOSIT*"+CHR$(34)+",8,1[145][145][145]"
  235. 9003 POKE631,1:POKE632,82:POKE633,85:POKE634,78:POKE635,13:POKE198,5
  236. 9004 END
  237.